function Log() {}

Log.prototype.type = ["primary", "success", "warn", "error", "info"]

Log.prototype.typeColor = function(type) {
  let color = ""
  switch (type) {
    case "primary":
      color = "#2d8cf0"
      break
    case "success":
      color = "#19be6b"
      break
    case "info":
      color = "#909399"
      break
    case "warn":
      color = "#ff9900"
      break
    case "error":
      color = "#f03f14"
      break
    default:
      color = "#35495E"
      break
  }
  return color
}

Log.prototype.isArray = function(obj) {
  return Object.prototype.toString.call(obj) === "[object Array]"
}

Log.prototype.print = function(text, type = "default", back = false) {
  if (typeof text === "object") {
    // 如果是對象則調用打印對象方式
    this.isArray(text) ? console.table(text) : console.dir(text)
    return
  }
  if (back) {
    // 如果是打印帶背景圖的
    console.log(`%c ${text} `, `background:${this.typeColor(type)}; padding: 2px; border-radius: 4px; color: #fff;`)
  } else {
    console.log(
      `%c ${text} `,
      `border: 1px solid ${this.typeColor(type)};
        padding: 2px; border-radius: 4px;
        color: ${this.typeColor(type)};`
    )
  }
}

Log.prototype.printBack = function(type = "primary", title) {
  this.print(type, title, true)
}

Log.prototype.pretty = function(type = "primary", title, text) {
  if (typeof text === "object") {
    console.group("Console Group", title)
    console.log(
      `%c ${title}`,
      `background:${this.typeColor(type)};border:1px solid ${this.typeColor(type)};
        padding: 1px; border-radius: 4px; color: #fff;`
    )
    this.isArray(text) ? console.table(text) : console.dir(text)
    console.groupEnd()
    return
  }
  console.log(
    `%c ${title} %c ${text} %c`,
    `background:${this.typeColor(type)};border:1px solid ${this.typeColor(type)};
      padding: 1px; border-radius: 4px 0 0 4px; color: #fff;`,
    `border:1px solid ${this.typeColor(type)};
      padding: 1px; border-radius: 0 4px 4px 0; color: ${this.typeColor(type)};`,
    "background:transparent"
  )
}

Log.prototype.prettyPrimary = function(title, ...text) {
  text.forEach((t) => this.pretty("primary", title, t))
}

Log.prototype.prettySuccess = function(title, ...text) {
  text.forEach((t) => this.pretty("success", title, t))
}

Log.prototype.prettyWarn = function(title, ...text) {
  text.forEach((t) => this.pretty("warn", title, t))
}

Log.prototype.prettyError = function(title, ...text) {
  text.forEach((t) => this.pretty("error", title, t))
}

Log.prototype.prettyInfo = function(title, ...text) {
  text.forEach((t) => this.pretty("info", title, t))
}

export default new Log()
